Reduce duplication in `Context` creation
authorAleksey Kladov <aleksey.kladov@gmail.com>
Mon, 11 Jul 2016 16:27:39 +0000 (19:27 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Mon, 11 Jul 2016 16:27:39 +0000 (19:27 +0300)
src/cargo/ops/cargo_clean.rs
src/cargo/ops/cargo_rustc/context.rs
src/cargo/ops/cargo_rustc/mod.rs

index 8306859ef5c18ef7bed4ce9afc40f8c5d421163d..47aaaa00d3864f3486ffaa8ceee419a98c565642 100644 (file)
@@ -5,7 +5,7 @@ use std::path::Path;
 use core::{Profiles, Workspace};
 use core::registry::PackageRegistry;
 use util::{CargoResult, human, ChainError, Config};
-use ops::{self, Layout, Context, BuildConfig, Kind, Unit};
+use ops::{self, Context, BuildConfig, Kind, Unit};
 
 pub struct CleanOptions<'a> {
     pub spec: &'a [String],
@@ -32,17 +32,13 @@ pub fn clean(ws: &Workspace, opts: &CleanOptions) -> CargoResult<()> {
     let resolve = try!(ops::resolve_ws(&mut registry, ws));
     let packages = ops::get_resolved_packages(&resolve, registry);
 
-    let dest = if opts.release {"release"} else {"debug"};
-    let host_layout = try!(Layout::new(ws, None, dest));
-    let target_layout = match opts.target {
-        Some(target) => Some(try!(Layout::new(ws, Some(target), dest))),
-        None => None,
-    };
-
     let profiles = try!(ws.current()).manifest().profiles();
-    let mut cx = try!(Context::new(&resolve, &packages, opts.config,
-                                   host_layout, target_layout,
-                                   BuildConfig::default(),
+    let mut cx = try!(Context::new(ws, &resolve, &packages, opts.config,
+                                   BuildConfig {
+                                       release: opts.release,
+                                       requested_target: opts.target.map(|s| s.to_owned()),
+                                       ..BuildConfig::default()
+                                   },
                                    profiles));
     let mut units = Vec::new();
 
index 964450e98e0066549782a64f439046f47241de6f..f73b9cada9f8330f28079d46b8141a1207448d64 100644 (file)
@@ -6,7 +6,7 @@ use std::sync::Arc;
 
 
 use core::{Package, PackageId, PackageSet, Resolve, Target, Profile};
-use core::{TargetKind, Profiles, Metadata, Dependency};
+use core::{TargetKind, Profiles, Metadata, Dependency, Workspace};
 use core::dependency::Kind as DepKind;
 use util::{self, CargoResult, ChainError, internal, Config, profile, Cfg, human};
 
@@ -55,13 +55,22 @@ struct TargetInfo {
 }
 
 impl<'a, 'cfg> Context<'a, 'cfg> {
-    pub fn new(resolve: &'a Resolve,
+    pub fn new(ws: &Workspace<'cfg>,
+               resolve: &'a Resolve,
                packages: &'a PackageSet<'cfg>,
                config: &'cfg Config,
-               host: Layout,
-               target_layout: Option<Layout>,
                build_config: BuildConfig,
                profiles: &'a Profiles) -> CargoResult<Context<'a, 'cfg>> {
+
+        let dest = if build_config.release { "release" } else { "debug" };
+        let host_layout = try!(Layout::new(ws, None, &dest));
+        let target_layout = match build_config.requested_target.as_ref() {
+            Some(target) => {
+                Some(try!(Layout::new(ws, Some(&target), &dest)))
+            }
+            None => None,
+        };
+
         let target = build_config.requested_target.clone();
         let target = target.as_ref().map(|s| &s[..]);
         let target_triple = target.unwrap_or_else(|| {
@@ -72,7 +81,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
         });
         Ok(Context {
             target_triple: target_triple,
-            host: host,
+            host: host_layout,
             target: target_layout,
             resolve: resolve,
             packages: packages,
index 705b03fae1693f9e1e16323b683c9a6113d4407c..3401145f4db8f08c6fcaf8142eb831b00bd18f8e 100644 (file)
@@ -80,18 +80,8 @@ pub fn compile_targets<'a, 'cfg: 'a>(ws: &Workspace<'cfg>,
         })
     }).collect::<Vec<_>>();
 
-    let dest = if build_config.release {"release"} else {"debug"};
     let root = try!(packages.get(resolve.root()));
-    let host_layout = try!(Layout::new(ws, None, &dest));
-    let target_layout = match build_config.requested_target.as_ref() {
-        Some(target) => {
-            Some(try!(layout::Layout::new(ws, Some(&target), &dest)))
-        }
-        None => None,
-    };
-
-    let mut cx = try!(Context::new(resolve, packages, config,
-                                   host_layout, target_layout,
+    let mut cx = try!(Context::new(ws, resolve, packages, config,
                                    build_config, profiles));
 
     let mut queue = JobQueue::new(&cx);